\documentclass{sig-alternate-05-2015}
\usepackage[utf8]{inputenc}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}

\def\mitloop{MIT \texttt{loop}}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}

\begin{document}
\global\copyrtyr={2016}
\setcopyright{rightsretained}
\title{A modern implementation of the LOOP macro}
\numberofauthors{1}
\author{\alignauthor
Robert Strandh\\
\affaddr{University of Bordeaux}\\
\affaddr{351, Cours de la Libération}\\
\affaddr{Talence, France}\\
\email{robert.strandh@u-bordeaux.fr}}

\maketitle

\begin{abstract}
Most \commonlisp{} \cite{ansi:common:lisp} implementations seem to use
a derivative of \mitloop{} \cite{Burke:Moon:MIT.loop}.  This
implementation predates the \commonlisp{} standard, which means that
it does not use some of the features of \commonlisp{} that were not
part of the language before 1994.  As a consequence, the \texttt{loop}
implementation in all major \commonlisp{} implementation is
\emph{monolithic} and therefore hard to maintain and extend.

Furthermore, \mitloop{} is not a conforming \texttt{loop}
implementation, in that it produces the wrong result for certain
inputs.  In addition, \mitloop{} accepts sequences of \texttt{loop}
clauses with undefined behavior according to the standard, though
whether such extended behavior is a problem is debatable.

We describe a modern implementation of the \commonlisp{} \texttt{loop}
macro.  This implementation is part of the \sicl{}%
\footnote{See https://github.com/robert-strandh/SICL}
project.  To make
this implementation of the macro modular, maintainable, and
extensible, we use \emph{combinator parsing} to recognize
\texttt{loop} clauses, and we use \clos{} generic functions for code
generation.
\end{abstract}

\begin{CCSXML}
  <ccs2012>
  <concept>
  <concept_id>10011007.10011006.10011008.10011024.10011027</concept_id>
  <concept_desc>Software and its engineering~Control structures</concept_desc>
  <concept_significance>500</concept_significance>
  </concept>
  </ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Control structures}

\printccsdesc

\keywords{\clos{}, \commonlisp{}, Iteration, Combinator parsing}

\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-benefits.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgments.tex}
\inputtex{app-loop.tex}

\bibliographystyle{abbrv}
\bibliography{loop}
\end{document}
